Function.prototype.myApply = function (thisArg , argsArray){
    //1. 确保 this 是一个函数
    if(typeof this !== 'function'){
        throw new TypeError(this + 'is not a function');
    }

    // 2.处理thisArg , 如果为null 或者 undefined , 则指向全局对象
    thisArg = thisArg ? Object(thisArg) : globalThis;

    // 3.创建一个唯一的属性名 , 避免覆盖原有属性

    const fnSymbol = Symbol();
    
    // 4. 将函数作为thisArg 的属性
    thisArg[fnSymbol] = this ; // 将函数挂载到thisArg上

    // 5.调用函数并传入参数数组
    const result = thisArg[fnSymbol](...argsArray);


    // 6. 删除临时属性

    delete thisArg[fnSymbol] ;

 
    return result ;

 }


 const obj = {
    name : 'ganzhibin'
 }

 function sayHello(age,hobby){
    console.log(`hello ${this.name} ,you are ${age} ,your hobby is ${hobby}`);
 }


 sayHello.myApply(obj,[18,'coding'])